import { invoke } from "@tauri-apps/api/core";
import { DownloadTask } from "@/types/download";

/**
 * 获取下载列表
 * @returns Promise<DownloadTask[]>
 */
export async function getDownloads(): Promise<DownloadTask[]> {
  try {
    return await invoke<DownloadTask[]>("get_downloads");
  } catch (error) {
    throw new Error(`获取下载列表失败: ${error}`);
  }
}

/**
 * 添加下载任务
 * @param category 应用分类
 * @param pkgname 应用包名
 * @param filename 文件名
 * @param name 应用名称
 */
export async function addDownload(category: string, pkgname: string, filename: string, name: string): Promise<void> {
  try {
    await invoke("add_download", { category, pkgname, filename, name });
  } catch (error) {
    throw new Error(`添加下载任务失败: ${error}`);
  }
}

/**
 * 暂停下载任务
 * @param category 应用分类
 * @param pkgname 应用包名
 */
export async function pauseDownload(category: string, pkgname: string): Promise<void> {
  try {
    await invoke("pause_download", { category, pkgname });
  } catch (error) {
    throw new Error(`暂停下载任务失败: ${error}`);
  }
}

/**
 * 继续下载任务
 * @param category 应用分类
 * @param pkgname 应用包名
 */
export async function resumeDownload(category: string, pkgname: string): Promise<void> {
  try {
    await invoke("resume_download", { category, pkgname });
  } catch (error) {
    throw new Error(`继续下载任务失败: ${error}`);
  }
}

/**
 * 取消下载任务
 * @param category 应用分类
 * @param pkgname 应用包名
 */
export async function cancelDownload(category: string, pkgname: string): Promise<void> {
  try {
    await invoke("cancel_download", { category, pkgname });
  } catch (error) {
    throw new Error(`取消下载任务失败: ${error}`);
  }
}